package com.rs.entity.task;

import cn.hutool.core.util.StrUtil;
import com.rs.entity.enums.DeviceEvent;
import com.rs.entity.enums.VehicleAngle;
import lombok.Data;
import lombok.experimental.Accessors;

import java.io.Serializable;

/**
 * 发送给消息队列(MQ)的动作对象
 *
 * @author zhouwz
 * @date 2020/7/7 22:39
 */
@Data
@Accessors(chain = true)
public class CommandAction implements Serializable {

    private static final long serialVersionUID = 1L;

    /**
     * y坐标
     */
    private double yAxis;

    /**
     * x坐标
     */
    private double xAxis;

    /**
     * 车辆角度
     */
    private Double angle;

    /**
     * 暂停时间
     */
    private int pauseTime;

    /**
     * 速度
     */
    private double maxSpeed;

    /**
     * 货架编号
     */
    private String shelfNo;

    /**
     * 货架类型
     */
    private String shelfType;

    /**
     * 举升高度
     */
    private Double liftHeight;

    /**
     * [文档内容]货架的类型： 0 正方形货架 1 长方形货架 2 万能货架，用于盲举 3 正方形无腿货架 5 半盲举货架， 如果尚未举升货架，则进行货架 id 判断，校验货 架有效性。举升货架后，按照盲举来处理 10 ~25 定制项目 100~109 货架列表 xml 中的货架类型
     */
    private String liftType;

    /**
     * 货架高度
     */
    private String shelfHeight;

    /**
     * 货架宽度
     */
    private String shelfWidth;

    /**
     * 货架方向编号
     */
    private Integer shelfDirectionCode;

    /**
     * 外置接口
     */
    private String outAppInterfaceNo;

    /**
     * 回调接口
     */
    private String callbackInterfaceNo;

    /**
     * 目标点位编号
     */
    private String nodeCode;

    /**
     * 是否带货架
     */
    private String takingShelf;

    /**
     * 点位类型
     */
    private String nodeType;

    /**
     * 事件类型
     */
    private String eventType;

    @Override
    public String toString() {
        DeviceEvent deviceEvent = DeviceEvent.getDeviceEvent(eventType);
        String action;
        switch (deviceEvent) {
            case BACKWARD:
                action = StrUtil.format(",后退到 ●{}({})", nodeCode, nodeType);
                break;
            case FORWARD:
                action = StrUtil.format(",移动到 ●{}({})", nodeCode, nodeType);
                break;
            case TURN:
                action = "," + deviceEvent.getInfo() + VehicleAngle.getVehicleAngle(angle.intValue()).getMsg();
                break;
            default:
                action = "," + deviceEvent.getInfo();
        }
        String suspendTime = pauseTime == 0 ? "" : show(pauseTime, "暂停时间");
        String basicInfo = StrUtil.format(" [X:{},Y:{}](速度:{})", xAxis, yAxis, maxSpeed);
        String log = basicInfo + suspendTime + action
                + show(outAppInterfaceNo, "前置接口")
                + show(callbackInterfaceNo, "后置接口")
                + ("1".equals(takingShelf) ? ",带货架" : ",不带货架");
        return log.substring(1);
    }

    private String show(Object obj, String msg) {
        return obj != null ? "," + msg + ":" + obj.toString() : "";
    }
}
